﻿/*
题目：
给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是，你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
*/
/*
	解题思路：
	增加一个用map命名为SwayMap，使用key-下标的方式来对应，将每次匹配过的数保存到SwayMap中，用tag来减
*/
#include <iostream>
#include <vector>
#include <map>

class  Solution
{
public:
	Solution() {};
	~Solution() {};
	void InitArray(std::vector<int>tmp);
	std::vector<int>GetIndex( int sum);
private:
	std::vector<int> SrcVector;
};
void Solution::InitArray(std::vector<int>tmp)
{
	//marray.assign(tmp.begin(), tmp.end());
	SrcVector.resize(tmp.size());
	std::copy(tmp.begin(), tmp.end(), SrcVector.begin());
	for (auto it : SrcVector)
	{
		std::cout << "it is :" << it << std::endl;
	}
}
std::vector<int> Solution::GetIndex(int sum)
{
	std::map<int, int>SwayMap;
	for (int i = 0;i<SrcVector.size();i++)
	{
		if (SwayMap.find(sum-SrcVector[i])!=SwayMap.end())
			return std::vector<int>{SwayMap[SrcVector[i]],i };
		else
			SwayMap[SrcVector[i]] = i;
	}
	return std::vector<int>{};
}


int main()
{
	Solution solution;
	std::vector<int >SrcVector{ 2, 7, 11, 15 };
	solution.InitArray(SrcVector);
	std::vector<int> ret(solution.GetIndex(9));
	if (ret.size()==2)
	{
		std::cout << "[" << ret[0] << "," << ret[1]<<"]" << std::endl;
	}
	system("pause");
}